package com.autumn.repo;

import java.io.InputStream;
import java.util.List;

public interface RepoService {

    //======仓库API=========
    //////////////////////////
    /**
     * 查询仓库列表
     * 
     * @param filter 仓库过滤器
     * @return
     */
    List<Repo> list(RepoFilter filter);

    /**
     * 创建仓库
     * 
     * @param user 操作用户
     * @param name 仓库名称
     * @return
     */
    Repo create(RepoUser user, String name);

    /**
     * 删除仓库
     * 
     * @param user 操作用户
     * @param name 仓库名称
     * @return
     */
    Repo delete(RepoUser user, String name);

    /**
     * 获取输入流
     * 
     * @param name 仓库名称
     * @param objectId 对象ID
     * @return
     */
    InputStream getInputStream(String name, String objectId);

    //======参考版本/快照API=========
    //////////////////////////
    /**
     * 查询仓库的所有版本
     * 
     * @param name 仓库名称
     * @return
     */
    List<RepoVersion> listVersions(String name);

    /**
     * 查询仓库某个版本下的文件信息
     * 
     * @param name 仓库名称
     * @param version 版本号
     * @param parent 父文件/路径的id
     * @return
     */
    List<RepoVersionFile> listVersionFiles(String name, String version, String parent);

    /**
     * 检出版本
     * 
     * @param name 仓库名称
     * @param version 版本号
     * @return
     */
    RepoVersion checkoutVersion(String name, String version);

    /**
     * 提交新版本
     * 
     * @param user
     * @param commit
     * @return
     */
    RepoVersion submitVersion(RepoUser user, String commit);

}
